﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using dacli.modelos.clases;
using dacli.modelos;
namespace dacli.pantallas
{
    public partial class PantallaPedidos : Form
    {
        dacli.modelos.Pedidos pedidos;
        string filtro;
        List<GridDetalle> listDetalle = new List<GridDetalle>();
        List<int> listaNavegacion = new List<int>();
        int posNav;
        private BindingSource bindingSource;

        bool calculoEdad;

        private void bloquear(bool estado)
        {
            estado = !estado;
            txtCedulaPac.Enabled = estado;
            txtNombrePac.Enabled = estado;
            txtDireccionPac.Enabled = estado;
            txtTelefonoPac.Enabled = estado;
            dtFechaNac.Enabled = estado;
            txtEdad.Enabled = estado;
            cmbTipoEdad.Enabled = estado;
            txtCedulaFac.Enabled = estado;
            txtNombreFac.Enabled = estado;
            txtDireccionFac.Enabled = estado;
            txtTelefonoFac.Enabled = estado;
            cmbIden.Enabled = estado;
            cmbExamen.Enabled = estado;
            txtPrecio.Enabled = estado;
            txtMonto.Enabled = estado;
            txtDescuentoDet.Enabled = estado;
            dgvDetalle.Enabled = estado;
            cmbTipoPago.Enabled = estado;
            txtDescuentoDet.Enabled = estado;
            txtRecargoGen.Enabled = estado;
            txtNota.Enabled = estado;

            //botones:

            btEditar.Enabled = (!estado) && (pedidos.estado.id == PedidoEstado.ABIERTO);
            btGuardar.Enabled = estado;            
        }

        private void actualizarGrilla()
        {       
            dgvDetalle.DataSource = null;
            bindingSource = new BindingSource();
            if (pedidos.listaPedidoDetalle.Count()>0)
            {
                try
                {
                    var query = from lista in pedidos.listaPedidoDetalle
                                select
                                    new { Id = lista.id, Nombre = lista.examen.nombre != null ? lista.examen.nombre : "", Precio = lista.precio, Descuento = lista.descuento, Monto = lista.getMonto() };
                    bindingSource.DataSource = query.ToList();
                    dgvDetalle.DataSource = bindingSource;

                    dgvDetalle.Columns[0].Visible = false;
                    dgvDetalle.Columns[1].Width = 500;
                    totalizar();
                }
                catch (Exception e) {
                    MessageBox.Show(e.ToString());
                }
            }
        }

        public void nuevo()
        {
            calculoEdad = true;
            txtPedido.Text = "-";
            pedidos = new  modelos.Pedidos();
            posNav = -1;
            filtro = "pedidos.id <> -1";
            this.actualizarLista();
            this.refrescar();

        }
        public void actualizarLista()
        {
            listaNavegacion = new modelos.dao.PedidosDAO().obtenerPedidos(filtro);
            lblRegistros.Text = "Total: " + listaNavegacion.Count.ToString();
        }

        public PantallaPedidos()
        {
            
            posNav = 0;
            InitializeComponent();
        }

        private void Pedidos_Load(object sender, EventArgs e)
        {
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet.tipo_pago' Puede moverla o quitarla según sea necesario.
            this.tipo_pagoTableAdapter.Fill(this.dacliDataSet.tipo_pago);
            // TODO: esta línea de código carga datos en la tabla 'dacliDataSet.examenes' Puede moverla o quitarla según sea necesario.
            this.examenesTableAdapter.Fill(this.dacliDataSet.examenes);
            this.idenTableAdapter.Fill(this.dacliDataSet.iden);
            cmbExamen.SelectedIndex = -1;
            this.nuevo();
            if (listaNavegacion.Count > 0)
            {
                posNav = listaNavegacion.Count - 1;
                this.cargarPedido(listaNavegacion.ElementAt(posNav));
            }
        }

        private void btAvanzada_Click(object sender, EventArgs e)
        {
            FiltrosPedidos filtroPedidos =  new FiltrosPedidos();
            filtroPedidos.ShowDialog();
            if (filtroPedidos.filtro != null)
            {
                filtro = filtroPedidos.filtro;
                this.actualizarLista();
                posNav = listaNavegacion.Count - 1;
                if (posNav != -1)
                {
                    this.cargarPedido(listaNavegacion.ElementAt(posNav));
                }
                else
                {
                    MessageBox.Show("No se encontraron Pedidos");
                }
            }
        }

        private void groupBox4_Enter(object sender, EventArgs e)
        {

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void cmbExamen_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtPrecio.Text = getPrecio().ToString("C");
        }
        private double getMonto(double precio)
        {
            return precio - (precio * (getDescuento()/100));
        }

        private double getDescuento()
        {
            double descuento;
            return Double.TryParse(txtDescuentoDet.Text, out descuento) ? descuento : 0;
        }
        private bool agregar()
        {
            bool agrego = false;
            double precio = getPrecio();
            string nombreExamen = cmbExamen.Text;
            dacli.modelos.dao.ExamenesDAO examenesDao = new dacli.modelos.dao.ExamenesDAO();
            examenesDao.consultar("nombre = '" + nombreExamen + "'");
            dacli.modelos.Examenes examen = examenesDao.examenes;

            int rowIndex = -1;
            foreach (DataGridViewRow row in dgvDetalle.Rows)
            {
                if (row.Cells[1].Value.ToString().Equals(nombreExamen))
                {
                    rowIndex = row.Index;
                    break;
                }
            }                
            if (rowIndex != -1)
            {
                dgvDetalle.Rows[rowIndex].Selected = true;
            }
            else
            {
                GridDetalle detalle = new GridDetalle(listDetalle.Count , nombreExamen, precio, getDescuento(), this.getMonto(precio), examen);
                pedidos.addDetalle(detalle);
            }
            agrego = true;
            cmbExamen.SelectedIndex = -1;
            txtDescuentoDet.Text = "";
            this.refrescar();
            return agrego;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            this.agregar();
        }

        private void dtFechaNac_ValueChanged(object sender, EventArgs e)
        {
            this.actualizarPaciente();            
            calculoEdad = false;
            pedidos.paciente.fechaNacimiento = dtFechaNac.Value;
            pedidos.paciente.calcularEdad();
            txtEdad.Text = pedidos.paciente.edad.ToString();
            cmbTipoEdad.Text = pedidos.paciente.tipo;
            calculoEdad = true;
        }

        private double getSubTotal()
        { 
            double subtotal = 0;
            foreach(DataGridViewRow row in dgvDetalle.Rows)
            {
                if (row.Cells.Count  >= 4 ) {
                    if (row.Cells[4].Value != null)
                        subtotal += Convert.ToInt32(row.Cells[4].Value);
                }
            }
            return subtotal;
        }

        private double getMontoIva()
        {
            double total = this.getSubTotal();
            return (total  * (Configuraciones.procIva / 100));
        }   
        private double getTotal()
        {
            return this.getSubTotal() + this.getMontoIva();
        }

        private void totalizar()
        {
            double subtotal = this.getSubTotal();
            double montoIva = this.getMontoIva();
            txtDescuentoGen.Text = txtDescuentoGen.Text == "" ? "0" : txtDescuentoGen.Text;
            txtRecargoGen.Text = txtRecargoGen.Text == "" ? "0" : txtRecargoGen.Text;
            pedidos.descuento = Convert.ToDouble(txtDescuentoGen.Text);
            pedidos.recargo = Convert.ToDouble(txtRecargoGen.Text);
            double totalDescuento = (pedidos.descuento / 100) * subtotal;
            double totalRecargo = (pedidos.recargo / 100) * subtotal;
            double total = montoIva + subtotal - totalDescuento + totalRecargo;
            txtTotalDescuento.Text = totalDescuento.ToString("C");
            txtTotalRecargo.Text = totalRecargo.ToString("C");
            txtSubTotal.Text = subtotal.ToString("C");
            txtIVA.Text = montoIva.ToString("C");
            txtTotal.Text = total.ToString("C");
        }

        private void calcularFechaNacimiento()
        {
            var tipo = cmbTipoEdad.SelectedItem ?? "";
            
            if (calculoEdad && tipo.ToString() != "" && txtEdad.Text != "")
            {
                pedidos.paciente.edad = int.Parse(txtEdad.Text);
                pedidos.paciente.tipo = tipo.ToString();
                pedidos.paciente.calcularFecha();
                dtFechaNac.Text = pedidos.paciente.fechaNacimiento.ToShortDateString();
            }

        }



        private void txtEdad_TextChanged(object sender, EventArgs e)
        {
            this.calcularFechaNacimiento();
        }

        private void dtFechaNac_Validated(object sender, EventArgs e)
        {
            calculoEdad = true;           
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void cmbTipoEdad_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.calcularFechaNacimiento();
        }

        private void cmbTipoPago_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbTipoPago.Enabled)
            {
                modelos.dao.TiposPagoDAO tiposPagosDAO = new modelos.dao.TiposPagoDAO();
                int tiposPagoid = (int)cmbTipoPago.SelectedValue;
                pedidos.tiposPago = tiposPagosDAO.asignarId(tiposPagoid);
                this.refrescar();
            }
            //DataRow[] result = dacliDataSet.tipo_pago.Select("id = " + id);
            //foreach (DataRow row in result) {
            //bool  observacion = Convert.ToBoolean(row["observacion"]);
            // txtNota.Visible = observacion;
            //}            

        }

        private void txtCedulaPac_TextChanged(object sender, EventArgs e)
        {
            

        }

        private void txtCedulaPac_Validated(object sender, EventArgs e)
        {
            this.actualizarPaciente();
           
            dacli.modelos.dao.PacientesDAO pacientesDAO = new dacli.modelos.dao.PacientesDAO();
            if (!pedidos.paciente.esNuevo())
            {
                pacientesDAO.asignarId(pedidos.paciente.id);
                pedidos.paciente = pacientesDAO.pacientes;
                this.mostrarPaciente();
            } else {
                pedidos.paciente.id = 0;
                txtNombrePac.Text = "";
                dtFechaNac.Value = DateTime.Now;
                txtDireccionPac.Text = "";
                txtTelefonoPac.Text = "";
                imgPaciente.Visible = (pedidos.paciente.esNuevo() && txtCedulaPac.Text !="");
            }
        }

        private void txtCedulaFac_TextChanged(object sender, EventArgs e)
        {

        }

        private void mostrarCliente()
        {
            if (pedidos.cliente != null)
            {
                txtCedulaFac.Text = (pedidos.cliente.cedula != null) ? pedidos.cliente.cedula : "";
                txtNombreFac.Text = (pedidos.cliente.nombre != null) ? pedidos.cliente.nombre : "";
                txtDireccionFac.Text = (pedidos.cliente.direccion != null) ? pedidos.cliente.direccion : "";
                txtTelefonoFac.Text = (pedidos.cliente.telefono != null) ? pedidos.cliente.telefono : "";
                imgCliente.Visible = pedidos.cliente.esNuevo() && txtCedulaFac.Text != "";
            }


        }
        private void mostrarPaciente()
        {
            if (pedidos.paciente != null)
            {
                txtNombrePac.Text = (pedidos.paciente.nombre != null) ? pedidos.paciente.nombre : "";
                txtCedulaPac.Text = (pedidos.paciente.cedula != null) ? pedidos.paciente.cedula : "";                
                txtDireccionPac.Text = (pedidos.paciente.direccion != null) ? pedidos.paciente.direccion : "";
                txtTelefonoPac.Text = (pedidos.paciente.telefono != null) ? pedidos.paciente.telefono : "";
                dtFechaNac.Value = (pedidos.paciente.fechaNacimiento > dtFechaNac.MinDate) ? pedidos.paciente.fechaNacimiento : DateTime.Now;
                imgPaciente.Visible = pedidos.paciente.esNuevo() && txtCedulaPac.Text != "";

            }
        }

        private void txtCedulaFac_Validated(object sender, EventArgs e)
        {
            this.actualizarCliente();            
            dacli.modelos.dao.ClientesDAO clienteDAO = new dacli.modelos.dao.ClientesDAO();
            if (clienteDAO.consultar("cedula = '" + pedidos.cliente.cedula + "'"))
            {
                pedidos.cliente = clienteDAO.clientes;
                this.mostrarCliente();
            }
            else {
                if (pedidos.paciente.cedula == pedidos.cliente.cedula)
                {
                    pedidos.copiarCliente();
                    this.refrescar();
                }
                else
                {
                    pedidos.cliente.id = 0;
                    txtNombreFac.Text = "";
                    txtDireccionFac.Text = "";
                    txtTelefonoFac.Text = "";
                    imgCliente.Visible = pedidos.cliente.esNuevo();
                }
            }
        }


        private void cmbIden_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void cmbIden_SelectedIndexChanged_1(object sender, EventArgs e)
        {
           modelos.dao.IdenDAO idenDao = new modelos.dao.IdenDAO();
           if (cmbIden.SelectedValue == null)
           {
               cmbIden.SelectedIndex = 0;
           }
           idenDao.asignarId((int)cmbIden.SelectedValue);
           pedidos.iden = idenDao.iden;
           txtPrecio.Text = this.getPrecio().ToString("C");
        }

        private double getPrecio()
        {
            if ((cmbExamen.Text != "") && (cmbIden.Text != ""))
            {
                return new dacli.modelos.dao.ExamenesDAO().getPrecio(cmbIden.Text, cmbExamen.Text);
            }
            else
            {
                return 0;
            }
        }

        private void txtDescuentoDet_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void txtDescuentoDet_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode== Keys.Enter) {
                this.agregar();
            }

        }

        private void Pedidos_KeyDown(object sender, KeyEventArgs e)
        {
            Control siguiente;
            if (e.KeyCode == Keys.Enter)
            {
                siguiente = GetNextControl(ActiveControl, !e.Shift);
                if (siguiente == null)
                {
                    siguiente = GetNextControl(null, true);
                }
                siguiente.Focus();
                //Finally - it suppresses the Enter Key
                e.SuppressKeyPress = true;
            }
        }

        private void btPagar_Click(object sender, EventArgs e)
        {            
            if (estaGuardada())
            {
                Pagos pagos = new Pagos(pedidos, this.getTotal());                
                pagos.ShowDialog();
                pedidos.estado = pagos.pedidosDao.pedidos.estado;
            }

            else
                MessageBox.Show("Primero debe guardar el pedido");
            this.refrescar();
        }
        private void actualizarPaciente()
        {
             modelos.dao.PacientesDAO pacientesDAO = new dacli.modelos.dao.PacientesDAO();
            bool buscaPaciente = pacientesDAO.consultar("cedula ='" + txtCedulaPac.Text + "'");
            if (!buscaPaciente)
            {
                pedidos.paciente = new Pacientes();
            }
            pedidos.paciente = buscaPaciente ? pacientesDAO.pacientes : pedidos.paciente;
            pedidos.paciente.cedula = txtCedulaPac.Text;
            pedidos.paciente.nombre = txtNombrePac.Text;
            pedidos.paciente.fechaNacimiento = dtFechaNac.Value;
            pedidos.paciente.direccion = txtDireccionPac.Text;
            pedidos.paciente.telefono = txtTelefonoPac.Text;
        }

        private void actualizarCliente()
        {
            modelos.dao.ClientesDAO clientesDAO = new dacli.modelos.dao.ClientesDAO();
            bool buscaCliente = clientesDAO.consultar("cedula ='" + txtCedulaFac.Text + "'");
            pedidos.cliente = buscaCliente ? clientesDAO.clientes : pedidos.cliente;
            pedidos.cliente.cedula = txtCedulaFac.Text;
            pedidos.cliente.nombre = txtNombreFac.Text;
            pedidos.cliente.direccion = txtDireccionFac.Text;
            pedidos.cliente.telefono = txtTelefonoFac.Text;
        }


        

        private void btGuardar_Click(object sender, EventArgs e)
        {
            modelos.dao.PacientesDAO pacientesDAO = new dacli.modelos.dao.PacientesDAO();
            modelos.dao.ClientesDAO clientesDAO = new dacli.modelos.dao.ClientesDAO();
            modelos.dao.IdenDAO idenDAO = new dacli.modelos.dao.IdenDAO();
            modelos.dao.PedidosDAO pedidosDAO = new dacli.modelos.dao.PedidosDAO();

            idenDAO.consultar("nombre ='" + cmbIden.Text + "'");
            pedidos.iden = idenDAO.iden;

            pacientesDAO = new modelos.dao.PacientesDAO();
            clientesDAO = new modelos.dao.ClientesDAO();
            pacientesDAO.pacientes = pedidos.paciente;
            clientesDAO.clientes = pedidos.cliente;
            pacientesDAO.actualizar("cedula ='" + txtCedulaPac.Text + "'");
            clientesDAO.actualizar("cedula ='" + txtCedulaFac.Text + "'");
            pedidos.paciente = pacientesDAO.pacientes;
            pedidos.cliente = clientesDAO.clientes;
            pedidos.subtotal = getSubTotal();
            pedidos.iva = Configuraciones.procIva;
            pedidos.observacion = "";
            pedidos.nota = txtNota.Text;
            pedidos.hora = DateTime.Now;
            pedidos.fecha = DateTime.Now;
            pedidosDAO.pedidos = pedidos;
            pedidos.id =  pedidosDAO.incluir();
            txtPedido.Text = pedidos.id.ToString();
            filtro = "pedidos.id <> -1";
            this.actualizarLista();
            this.refrescar();
        }

        private void groupBox5_Enter(object sender, EventArgs e)
        {

        }

        private void label13_Click(object sender, EventArgs e)
        {

        }

        private void txtPedido_TextChanged(object sender, EventArgs e)
        {

        }

        private bool cargarPedido(int pedidoId)
        {
            modelos.dao.PedidosDAO pedidosDao = new modelos.dao.PedidosDAO();
            if (pedidosDao.consultar("id=" + pedidoId))
            {
                pedidos = pedidosDao.pedidos;
                this.refrescar();
                this.bloquear(true);
                return true;
            }
            return false;   
        }

        private void txtPedido_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F3) 
            {
                int pedidoId = Convert.ToInt32(txtPedido.Text);
                if (!cargarPedido(pedidoId))
                {
                    MessageBox.Show("Pedido no encontrado");
                }
            }
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void txtPedido_Validated(object sender, EventArgs e)
        {

        }

        private void refrescar()
        {            
            txtPedido.Text = estaGuardada() ? pedidos.id.ToString() : "[Nuevo]";
            txtNumPaciente.Text = (pedidos.pacienteDiario != -1) ? pedidos.pacienteDiario.ToString() : "[Nuevo]";
            int año = DateTime.MinValue.Year;
            txtFecha.Text = (pedidos.fecha.Year != año) ? pedidos.fecha.ToString() : "[Nuevo]";
            txtSubTotal.Text = pedidos.subtotal.ToString();            
            this.mostrarCliente();
            this.mostrarPaciente();
            cmbIden.SelectedValue = pedidos.iden.id;
            listDetalle = new List<GridDetalle>();            
            this.actualizarGrilla();
            double abonado =0;
            double restan = 0;
            if (pedidos.id != -1)
            {
                modelos.dao.PedidosDAO pedidosDao = new modelos.dao.PedidosDAO();
                pedidosDao.asignarId(pedidos.id);
                pedidos.descuento = pedidosDao.pedidos.descuento;
                pedidos.recargo = pedidosDao.pedidos.recargo;
                abonado = pedidosDao.getTotalPagos(pedidos.id);
                restan = this.getTotal() - abonado;
                lblAbonado.Text = abonado.ToString("C");
                lblRestan.Text = restan.ToString("C");
            }
            lblAbonado.Text = abonado.ToString("C");
            lblRestan.Text = restan.ToString("C");
            txtEstado.Text = estaGuardada() ? pedidos.estado.nombre: "-";
            lblEstado.Visible = estaGuardada();
            txtEstado.Visible = estaGuardada();
            if (pedidos.factura != null)
            {
                txtFactura.Text = pedidos.factura.getFormateado();
                lblFechaFac.Text = pedidos.factura.fecha.ToString();
            }
            else {
                txtFactura.Text = "";                
            }
            bool expre = txtFactura.Text != "";
            lblFactura.Visible = expre;
            txtFactura.Visible = expre;
            lblFechaFac.Visible = expre;
            txtRecargoGen.Text = pedidos.recargo.ToString();
            txtDescuentoGen.Text = pedidos.descuento.ToString();
            btAnular.Enabled = ((pedidos.estado.id != PedidoEstado.ANULADO) && (pedidos.estado.id != PedidoEstado.ENTREGADO) && estaGuardada());
            btPagar.Enabled = estaGuardada();
            btImprimir.Enabled = estaGuardada();
            btFactura.Enabled = ((pedidos.estado.id != PedidoEstado.ANULADO)  && estaGuardada());
            lblNota.Visible = pedidos.tiposPago.observacion;
            txtNota.Visible = pedidos.tiposPago.observacion;
            if (listaNavegacion.Count>0)
                Progreso.Maximum = listaNavegacion.Count - 1;
            if (posNav != -1)
                Progreso.Value = posNav;
            else {
                Progreso.Value = 0;
            }
            cmbTipoPago.SelectedValue = pedidos.tiposPago.id;
            totalizar();
            
        }

        private bool estaGuardada()
        {
            return (pedidos.id != -1);
        }

        private void btNueva_Click(object sender, EventArgs e)
        {
            
            this.nuevo();
            this.bloquear(false);
            this.refrescar();
            txtCedulaPac.Focus();
        }

        private void btPrimer_Click(object sender, EventArgs e)
        {
            posNav = 0;
            this.cargarPedido(listaNavegacion.ElementAt(posNav));
        }

        private void btUltimo_Click(object sender, EventArgs e)
        {
            posNav = listaNavegacion.Count -1 ;
            this.cargarPedido(listaNavegacion.ElementAt(posNav));
        }

        private void btAnterior_Click(object sender, EventArgs e)
        {
            if ( posNav > 0)
            {
                btAnterior.Enabled = false;
                --posNav;
                this.cargarPedido(listaNavegacion.ElementAt(posNav));
                btAnterior.Enabled = true;

            }
            else
            {
                MessageBox.Show("A llegado al principio de pedidos");
                posNav = 0;
            }


        }

        private void btSiguiente_Click(object sender, EventArgs e)
        {
            btSiguiente.Enabled = false;
            if (posNav < listaNavegacion.Count-1)
            {
                ++posNav;
                this.cargarPedido(listaNavegacion.ElementAt(posNav));
            }
            else
            {
                MessageBox.Show("A llegado al final de pedidos");
                posNav = listaNavegacion.Count - 1;
            }
            btSiguiente.Enabled = true;

        }

        private void btSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void region(object sender, EventArgs e)
        {
            MessageBox.Show("a");
        }

        private void txtNombrePac_TextChanged(object sender, EventArgs e)
        {
            this.actualizarCliente();
        }

        private void txtNombrePac_Validated(object sender, EventArgs e)
        {
            this.actualizarPaciente();
        }

        private void txtEdad_Validated(object sender, EventArgs e)
        {
            this.actualizarPaciente();

        }

        private void cmbTipoEdad_Validating(object sender, CancelEventArgs e)
        {
            this.actualizarPaciente();
        }

        private void txtDireccionPac_Validated(object sender, EventArgs e)
        {
            this.actualizarPaciente();

        }

        private void txtTelefonoPac_Validated(object sender, EventArgs e)
        {
            this.actualizarPaciente();

        }

        private void txtNombreFac_Validated(object sender, EventArgs e)
        {
            this.actualizarCliente();
        }

        private void txtDireccionFac_Validated(object sender, EventArgs e)
        {
            this.actualizarCliente();
        }

        private void txtTelefonoFac_Validated(object sender, EventArgs e)
        {
            this.actualizarCliente();
        }

        private void groupBox2_Enter(object sender, EventArgs e)
        {

        }

        private void btFactura_Click(object sender, EventArgs e)
        {
            if (pedidos.estado.id == PedidoEstado.CERRADO)
            {
                modelos.dao.PedidosDAO pedidosDAO = new dacli.modelos.dao.PedidosDAO();
                pedidosDAO.pedidos = pedidos;
                pedidosDAO.facturar();
                pedidos = pedidosDAO.pedidos;
                this.refrescar();
            }
            else {
                MessageBox.Show("La factura debe estar cerrada");
            }
        }

        private void btEditar_Click(object sender, EventArgs e)
        {
            this.bloquear(false);
        }

        private void groupBox8_Enter(object sender, EventArgs e)
        {

        }

        private void btAnular_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(this,"Esta Seguro que desea anular este pedido","Anulacion de Pedidos",MessageBoxButtons.YesNo) ==System.Windows.Forms.DialogResult.Yes)
            {

                modelos.dao.PedidosDAO pedidosDao = new modelos.dao.PedidosDAO();
                pedidosDao.asignarId(pedidos.id);
                pedidosDao.anular();
                pedidos.estado = pedidosDao.pedidos.estado;
                this.refrescar();
            }
        }

        private void txtDireccionPac_TextChanged(object sender, EventArgs e)
        {

        }

        private void lblEstado_Click(object sender, EventArgs e)
        {

        }

        private void groupBox1_Validated(object sender, EventArgs e)
        {
            pedidos.copiarCliente();
            this.refrescar();
        }

        private void txtCedulaPac_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = !esValidaCedula(txtCedulaPac.Text);
        }

        private void txtCedulaFac_Validating(object sender, CancelEventArgs e)
        {
            e.Cancel = !esValidaCedula(txtCedulaFac.Text);
        }

        public bool esValidaCedula(string cedula)
        {
            bool esValida = true;
            if (cedula.Length <= 1)
            {
                MessageBox.Show("La cedula debe tener mas de un caracter","Error en cedula",MessageBoxButtons.OK,MessageBoxIcon.Warning);
                esValida = false;
            }
            return esValida;
        }

        private void label21_Click(object sender, EventArgs e)
        {

        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {

        }

        private void dgvDetalle_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                modelos.dao.ExamenesDAO examenDao = new modelos.dao.ExamenesDAO();
                
                PedidoDetalle pedidoDetalle = new PedidoDetalle();
                    int fila = dgvDetalle.CurrentCell.RowIndex;
                    int d = (int)dgvDetalle[0, fila].Value;
                    string nombreExamen = (string)dgvDetalle[1, fila].Value;
                    double precio = (double)dgvDetalle[2, fila].Value;
                    double descuento = (double)dgvDetalle[3, fila].Value;
                    double monto = (double)dgvDetalle[4, fila].Value;
                    examenDao.consultar("nombre ='" + nombreExamen + "'");
                    modelos.Examenes examen = examenDao.examenes;
                    modelos.PedidoDetalle detalle = new PedidoDetalle();
                    detalle.examen = examen;
                    detalle.precio = precio;
                    detalle.descuento = descuento;
                    pedidos.removerDetalle(detalle);
                    this.actualizarGrilla();
                }
            
        }

        private void dgvDetalle_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void btnAdd_Enter(object sender, EventArgs e)
        {
            //this.agregar();
        }

        private void groupBox6_Enter(object sender, EventArgs e)
        {

        }

        private void txtDescuentoGen_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtDescuentoGen_Validated(object sender, EventArgs e)
        {
            totalizar();
        }

        private void txtRecargoGen_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtRecargoGen_Validated(object sender, EventArgs e)
        {
            totalizar();
        }

        private void lblRegistros_Click(object sender, EventArgs e)
        {

        }

    }
}
    